/***********************************************************
 *
 * Gaoth
 * Copyright (c) 2011- Marcus Lundgren
 *
 * This software is provided 'as-is', without any express or implied warranty.
 * In no event will the authors be held liable for any damages arising from
 * the use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it freely,
 * subject to the following restrictions:
 *
 *  1. The origin of this software must not be misrepresented; you must not
 *     claim that you wrote the original software. If you use this software
 *     in a product, an acknowledgment in the product documentation would be
 *     appreciated but is not required.
 *
 *  2. Altered source versions must be plainly marked as such,
 *     and must not be misrepresented as being the original software.
 *
 *  3. This notice may not be removed or altered from any source distribution.
 *
 ***********************************************************/

#include "model_payload.h"

namespace gth
{
namespace shared
{
namespace network
{
sf::Packet& operator<<( sf::Packet& p, const gth::shared::data::BaseEntity& entity )
{
    return p << entity.pos.x << entity.pos.y
            << entity.pos.x << entity.pos.y;
}

sf::Packet& operator>>( sf::Packet& p, data::BaseEntity& entity )
{
    return p >> entity.pos.x >> entity.direction.y
            >> entity.direction.x >> entity.direction.y;
}

void ModelPayload::to_packet( sf::Packet& p ) const
{
    size_t number_of_entities = entities.size();

    p << MODEL << number_of_entities;

    for( size_t i = 0 ; i < number_of_entities ; ++i )
        p << entities[ i ];
}

void ModelPayload::extract_data_from_packet( sf::Packet& p )
{
    size_t number_of_entities;

    p >> number_of_entities;

    for( size_t i = 0 ; i < number_of_entities ; ++i )
    {
        data::BaseEntity entity;
        p >> entity;
        entities.push_back( entity );
    }
}
}
}
}
